home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac-Source 1994 July
/
Mac-Source_July_1994.iso
/
C and C++
/
System
/
lpDaemon SRC
/
lpd Headers
/
PAP.H
< prev
next >
Wrap
Text File
|
1993-02-12
|
5KB
|
213 lines
/************************************************************************
* *
* PAP.H Definitions for Printer Access Protocol *
* *
************************************************************************/
#ifndef __APPLETALK__
#include <appletalk.h>
#endif
#if 0
#define PAP_OPEN_TIMEOUT 2*60 /* 2 seconds */
#define PAP_OPEN_RETRIES 5 /* as per spec */
#define PAP_CLOSE_TIMEOUT 5*60 /* 5 seconds */
#define PAP_CLOSE_RETRIES 3 /* */
#define PAP_CONNECTION_TIMEOUT 2*60*60 /* 2 minutes */
#define PAP_TICKLE_TIMEOUT 60*60 /* 1 minute */
#define PAP_TICKLE_RETRIES 255 /* retry count of infinity */
#define PAP_READ_TIMEOUT 15*60 /* 15 seconds */
#define PAP_READ_RETRIES 255 /* retry count of infinity */
#define PAP_ARBITRATION_TIME 2*60 /* two seconds */
#define PAP_SHUT_WRITE 0x01
#define PAP_SHUT_READ 0x02
#define PAP_SHUT_ALL 0x04
#endif
#define PAPSegSize 512
#define min_PAPpkt_size (lapSize+ddpSize+atpSize)
enum{ /* PAP message codes */
papOpenConn = 1,
papOpenConnReply,
papSendData,
papData,
papTickle,
papCloseConn,
papCloseConnReply,
papSendStatus,
papStatusReply
};
typedef struct PAPStatusRec
{
Byte atpRSkt; /* responding socket */
Byte flowQ; /* flow quantum */
Word result; /* result of operation */
Str255 statusStr; /* the status string */
} PAPStatusRec, *PAPStatusPtr;
#if 0
typedef struct SendDataCredit
{
Boolean valid; /* is this a valid credit record */
Byte socket; /* which socket is it for */
Word transID; /* transaction identifier for this credit */
integer credit;
} SDC;
typedef struct PAPWriteRecord
{
Boolean valid;
Boolean active;
BDSElement bds[8];
ATPParamBlock abr;
integer *wstate; /* also called comp */
integer cno;
} PWR;
typedef struct PAPReadRecord
{
integer valid;
BDSElement bds[8];
ATPParamBlock abr;
integer *eof;
integer *rstate; /* also called comp */
integer *size;
integer numBDS;
} PRR;
typedef struct PAP_Socket
{
integer active; /* active flag */
integer state; /* state of the socket */
integer rRSkt; /* remote responding socket */
integer rFlowQ; /* remote flow quantum */
integer papUSeq; /* remote pap data request sequence used */
integer papRSeq; /* remote pap data request sequence received */
integer flowQ; /* our flow quantum */
integer papSeq; /* our pap data request sequence */
integer papRSkt; /* our responding socket */
Byte connID; /* connection ID number */
PRR prr; /* read request */
PWR pwr; /* write request */
SDC sdc; /* outstanding sdc */
ATPParamBlock requestAbr;
integer reqActive;
ATPParamBlock abr;
BDSElement bds[1];
LongInt wtime; /* last tickle time */
PAPStatusRec po, por;
PAPStatusPtr status;
integer *ostate;
integer tstate;
AddrBlock addr;
Word transID;
} PAP_Socket;
typedef struct gnj_queue
{
QElemPtr qLink;
integer qType;
integer used_entry;
PAP_Socket *ps;
} gnjQElem, *gnjQElemPtr;
typedef struct PAP_S_Socket
{
integer active;
integer state;
integer arbState;
integer resskt;
integer flowQ;
PAPStatusPtr status;
ATPParamBlock abr;
NamesTableEntry name;
QHdr gnj_q;
PAPStatusRec pap;
} PAP_S_Socket;
#endif
typedef struct {
Byte connID; /* connection ID */
Byte PAPtype; /* type of PAP packet */
union {
struct {
Byte eof; /* eof in data (Tresp) */
Byte unused; /* */
} std;
Word seqNo; /* send data sequence number */
} other;
} PAPUserBytes;
#if 0
#define PAP_UNUSED -1
#define PAP_BLOCKED 0
#define PAP_UNBLOCKED 1
#define PAP_WAITING 2
#define PAP_ARBITRATE 3
#define PAP_CLOSED 0
#define PAP_OPENED 1
#define PAP_INACTIVE 3
#define PAP_OPENING 4
#define PAP_GNJOPENING 5
#define PAP_GNJFOUND 6
#define nextPAPseq(x) ( (x) = ((++(x) % 65535) == 0 ) ? 1 : (x) % 65535 )
#define NUMPAP 6
#define NUMSPAP 6
#endif
/* Routines for PAP common to servers and clients */
Handle PAPLoad(void);
OSErr PAPUnload(void);
OSErr PAPRead(integer refNum, Ptr data, integer *size,
integer *eof, integer *rstate);
OSErr PAPWrite(integer refNum, Ptr data, integer size,
integer eof, integer *wstate);
OSErr PAPClose(integer refNum);
#if 0
/* Routines for PAP for servers */
OSErr SLInit(integer *sRef, EntityName *printerName,
integer flowQuantum, PAPStatusRec *status);
OSErr SLClose(integer sRef);
OSErr PAPRegName(integer sRef, EntityPtr printer);
OSErr PAPRemName(integer sRef, EntityPtr printer);
OSErr GetNextJob(integer sRef, integer *refNum, integer *jstate);
OSErr HeresStatus(integer sRef, PAPStatusRec *status);
#endif
/* Routines for PAP for clients */
OSErr PAPStatus(EntityPtr printer,
PAPStatusRec *status, AddrBlock *prtAddr);
OSErr PAPOpen(integer *refNum, EntityPtr printer,
integer flowQuantum, PAPStatusRec *status, integer *ostate);